﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using CondominioG1.Persistencia.NHibernate;
using CondominioG1.Dominio;
using CondominioG1.Negocio;

using Spring.Context;
using Spring.Context.Support;

namespace CondominioG1.Pruebas.TestService
{
    [TestFixture]
    public class TestViviendaService
    {

        private IApplicationContext Spring;

        [TestFixtureSetUp]
        public void InicializarPruebas()
        {
            Spring = new XmlApplicationContext(
                "assembly://CondominioG1/CondominioG1/capaPersistencia.xml",
                "assembly://CondominioG1/CondominioG1/capaNegocio.xml"
                );

            // Obtengo una referencia a la clase de negocio a probar
            ReservaService reservaService = (ReservaService)Spring.GetObject("reservaService");
            ViviendaService viviendaService = (ViviendaService)Spring.GetObject("viviendaService");
            ResidenteService residenteService = (ResidenteService)Spring.GetObject("residenteService");
            CuotaService cuotaService = (CuotaService)Spring.GetObject("cuotaService");
            //Limpia la base de datos de Condominio
            reservaService.EliminarReservas();
            cuotaService.EliminaCuotas();
            viviendaService.EliminarViviendas();
            residenteService.EliminarResidentes();

            //Data para modificar y eliminar usada en las pruebas
            residenteService.RegistrarResidente("40506070", "Leila", "Conde", 31, "lconde@upc.edu.pe", "yurnero", "PROPIETARIO");
            residenteService.RegistrarResidente("71255612", "Logan", "Castillo", 31, "lcastillo@claro.com", "logan", "PROPIETARIO");
            viviendaService.RegistrarVivienda("V0001", "A51", 1023, 125, "DUPLEX", "71255612", "71255612");
            viviendaService.RegistrarVivienda("V0002", "A51", 2020, 90, "DEPARTAMENTO", "71255612", "71255612");
            viviendaService.RegistrarVivienda("V0003", "A51", 4040, 40, "MINIDEPARTAMENTO", "71255612", "71255612");
        }

        [Test]
        public void Test_RegistrarVivienda_correctamente()
        {
            ViviendaService ViviendaService = (ViviendaService)Spring.GetObject("viviendaService");
            Vivienda ViviendaCreado = null;
            Assert.DoesNotThrow(delegate
            {
                ViviendaCreado = ViviendaService.RegistrarVivienda("V0004", "A51", 1023, 95, "DEPARTAMENTO", "71255612", "71255612");
            });
            Assert.NotNull(ViviendaCreado);
        }

        [Test]
        public void Test_ModificarVivienda_correctamente()
        {
            ViviendaService ViviendaService = (ViviendaService)Spring.GetObject("viviendaService");
            Vivienda ViviendaModificado = null;

            ViviendaModificado = ViviendaService.ModificarVivienda("V0001", "A51", 102, 125, "DEPARTAMENTO", "40506070", "40506070");
            Assert.NotNull(ViviendaModificado);
        }

        [Test]
        public void Test_EliminarVivienda_correctamente()
        {
            ViviendaService ViviendaService = (ViviendaService)Spring.GetObject("viviendaService");
            Vivienda ViviendaEliminado = null;
            ViviendaEliminado = ViviendaService.EliminarVivienda("V0003");
        }

        [Test]
        public void Test_RegistrarVivienda_incorrectamente()
        {
            ViviendaService ViviendaService = (ViviendaService)Spring.GetObject("viviendaService");
            Vivienda ViviendaCreado = null;
            Assert.Catch(delegate
            {
                ViviendaCreado = ViviendaService.RegistrarVivienda("V0005", "A60", 2020, 90, "DEPARTAMENTO", "", "");  
            });
        }
    }
}
